1 using UnityEditor;
2 using
UnityEngine;
3
4 #
if UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 || UNITY_4_6
5 using
UnityEditorInternal;
6 #endif

7
8 [CustomEditor(
typeof (PhotonAnimatorView))]
9 public
class PhotonAnimatorViewEditor : Editor
10 {
11     
private Animator m_Animator;
12     
private PhotonAnimatorView m_Target;
13
14 #
if UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 || UNITY_4_6
15     
private AnimatorController m_Controller;
16 #endif
17
18     
public override void OnInspectorGUI()
19     {
20         
//base.OnInspectorGUI();
21
22         
if (this.m_Animator == null)
23         {
24             GUILayout.BeginVertical(GUI.skin.box);
25             GUILayout.Label(
"GameObject doesn't have an Animator component to synchronize");
26             GUILayout.EndVertical();
27             
return;
28         }
29
30         DrawWeightInspector();
31
32         
if (this.m_Animator.layerCount == 0)
33         {
34             GUILayout.BeginVertical(GUI.skin.box);
35             GUILayout.Label(
"Animator doesn't have any layers setup to synchronize");
36             GUILayout.EndVertical();
37         }
38
39         DrawParameterInspector();
40
41         
if (GetParameterCount() == 0)
42         {
43             GUILayout.BeginVertical(GUI.skin.box);
44             GUILayout.Label(
"Animator doesn't have any parameters setup to synchronize");
45             GUILayout.EndVertical();
46         }
47
48         serializedObject.ApplyModifiedProperties();
49
50         
//GUILayout.Label( "m_SynchronizeLayers " + serializedObject.FindProperty( "m_SynchronizeLayers" ).arraySize );
51         
//GUILayout.Label( "m_SynchronizeParameters " + serializedObject.FindProperty( "m_SynchronizeParameters" ).arraySize );
52     }
53
54     
private void OnEnable()
55     {
56         
this.m_Target = (PhotonAnimatorView) target;
57         
this.m_Animator = this.m_Target.GetComponent<Animator>();
58
59 #
if UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 || UNITY_4_6
60         
this.m_Controller = AnimatorController.GetEffectiveAnimatorController(this.m_Animator);
61 #endif
62
63         CheckIfStoredParametersExist();
64     }
65
66     
private void DrawWeightInspector()
67     {
68         SerializedProperty foldoutProperty = serializedObject.FindProperty(
"ShowLayerWeightsInspector");
69         foldoutProperty.boolValue = PhotonGUI.ContainerHeaderFoldout(
"Synchronize Layer Weights", foldoutProperty.boolValue);
70
71         
if (foldoutProperty.boolValue == false)
72         {
73             
return;
74         }
75
76         
float lineHeight = 20;
77         Rect containerRect = PhotonGUI.ContainerBody(
this.m_Animator.layerCount*lineHeight);
78
79         
for (int i = 0; i < this.m_Animator.layerCount; ++i)
80         {
81             
if (this.m_Target.DoesLayerSynchronizeTypeExist(i) == false)
82             {
83                 
this.m_Target.SetLayerSynchronized(i, PhotonAnimatorView.SynchronizeType.Disabled);
84                 EditorUtility.SetDirty(
this.m_Target);
85             }
86
87             PhotonAnimatorView.SynchronizeType
value = this.m_Target.GetLayerSynchronizeType(i);
88
89             Rect elementRect =
new Rect(containerRect.xMin, containerRect.yMin + i*lineHeight, containerRect.width, lineHeight);
90
91             Rect labelRect =
new Rect(elementRect.xMin + 5, elementRect.yMin + 2, EditorGUIUtility.labelWidth - 5, elementRect.height);
92             GUI.Label(labelRect,
"Layer " + i);
93
94             Rect popupRect =
new Rect(elementRect.xMin + EditorGUIUtility.labelWidth, elementRect.yMin + 2, elementRect.width - EditorGUIUtility.labelWidth - 5, EditorGUIUtility.singleLineHeight);
95             
value = (PhotonAnimatorView.SynchronizeType) EditorGUI.EnumPopup(popupRect, value);
96
97             
if (i < this.m_Animator.layerCount - 1)
98             {
99                 Rect splitterRect =
new Rect(elementRect.xMin + 2, elementRect.yMax, elementRect.width - 4, 1);
100                 PhotonGUI.DrawSplitter(splitterRect);
101             }
102
103             
if (value != this.m_Target.GetLayerSynchronizeType(i))
104             {
105                 Undo.RecordObject(target,
"Modify Synchronize Layer Weights");
106                 
this.m_Target.SetLayerSynchronized(i, value);
107
108                 EditorUtility.SetDirty(
this.m_Target);
109             }
110         }
111     }
112
113     
private int GetParameterCount()
114     {
115 #
if UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 || UNITY_4_6
116         
if (this.m_Controller == null)
117         {
118             
return 0;
119         }
120
121         
return this.m_Controller.parameterCount;
122 #
else
123         
if( m_Animator == null )
124         {
125             
return 0;
126         }
127
128         
return m_Animator.parameters.Length;
129 #endif
130     }
131
132     
private bool DoesParameterExist(string name)
133     {
134 #
if UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 || UNITY_4_6
135         
for (int i = 0; i < this.m_Controller.parameterCount; ++i)
136         {
137             
if (this.m_Controller.GetParameter(i).name == name)
138             {
139                 
return true;
140             }
141         }
142
143         
return false;
144 #
else
145         
for( int i = 0; i < m_Animator.parameters.Length; ++i )
146         {
147             
if( m_Animator.parameters[ i ].name == name )
148             {
149                 
return true;
150             }
151         }
152
153         
return false;
154 #endif
155     }
156
157     
private void CheckIfStoredParametersExist()
158     {
159         
for (int i = 0; i < this.m_Target.GetSynchronizedParameters().Count; ++i)
160         {
161             
string parameterName = this.m_Target.GetSynchronizedParameters()[i].Name;
162             
if (DoesParameterExist(parameterName) == false)
163             {
164                 Debug.LogWarning(
"Parameter '" + this.m_Target.GetSynchronizedParameters()[i].Name +
165                                  
"' doesn't exist anymore. Removing it from the list of synchronized parameters");
166                 
int numberOfRemovedElements = this.m_Target.GetSynchronizedParameters().RemoveAll(item => item.Name == parameterName);
167                 EditorUtility.SetDirty(
this.m_Target);
168
169                 i -= numberOfRemovedElements;
170
171                 
if (i < 0)
172                 {
173                     
break;
174                 }
175             }
176         }
177     }
178
179     
private void DrawParameterInspector()
180     {
181         SerializedProperty foldoutProperty = serializedObject.FindProperty(
"ShowParameterInspector");
182         foldoutProperty.boolValue = PhotonGUI.ContainerHeaderFoldout(
"Synchronize Parameters", foldoutProperty.boolValue);
183
184         
if (foldoutProperty.boolValue == false)
185         {
186             
return;
187         }
188
189         
float lineHeight = 20;
190         Rect containerRect = PhotonGUI.ContainerBody(GetParameterCount()*lineHeight);
191
192         
for (int i = 0; i < GetParameterCount(); i++)
193         {
194             AnimatorControllerParameter parameter =
null;
195
196 #
if UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 || UNITY_4_6
197             parameter =
this.m_Controller.GetParameter(i);
198 #
else
199             parameter = m_Animator.parameters[ i ];
200 #endif
201
202             
string defaultValue = "";
203
204             
if (parameter.type == AnimatorControllerParameterType.Bool)
205             {
206                 defaultValue += parameter.defaultBool.ToString();
207             }
208             
else if (parameter.type == AnimatorControllerParameterType.Float)
209             {
210                 defaultValue += parameter.defaultFloat.ToString();
211             }
212             
else if (parameter.type == AnimatorControllerParameterType.Int)
213             {
214                 defaultValue += parameter.defaultInt.ToString();
215             }
216
217             
if (this.m_Target.DoesParameterSynchronizeTypeExist(parameter.name) == false)
218             {
219                 
this.m_Target.SetParameterSynchronized(parameter.name, (PhotonAnimatorView.ParameterType) parameter.type, PhotonAnimatorView.SynchronizeType.Disabled);
220                 EditorUtility.SetDirty(
this.m_Target);
221             }
222
223             PhotonAnimatorView.SynchronizeType
value = this.m_Target.GetParameterSynchronizeType(parameter.name);
224
225             Rect elementRect =
new Rect(containerRect.xMin, containerRect.yMin + i*lineHeight, containerRect.width, lineHeight);
226
227             Rect labelRect =
new Rect(elementRect.xMin + 5, elementRect.yMin + 2, EditorGUIUtility.labelWidth - 5, elementRect.height);
228             GUI.Label(labelRect, parameter.name +
" (" + defaultValue + ")");
229
230             Rect popupRect =
new Rect(elementRect.xMin + EditorGUIUtility.labelWidth, elementRect.yMin + 2, elementRect.width - EditorGUIUtility.labelWidth - 5, EditorGUIUtility.singleLineHeight);
231             
value = (PhotonAnimatorView.SynchronizeType) EditorGUI.EnumPopup(popupRect, value);
232
233             
if (i < GetParameterCount() - 1)
234             {
235                 Rect splitterRect =
new Rect(elementRect.xMin + 2, elementRect.yMax, elementRect.width - 4, 1);
236                 PhotonGUI.DrawSplitter(splitterRect);
237             }
238
239             
if (value != this.m_Target.GetParameterSynchronizeType(parameter.name))
240             {
241                 Undo.RecordObject(target,
"Modify Synchronize Parameter " + parameter.name);
242                 
this.m_Target.SetParameterSynchronized(parameter.name, (PhotonAnimatorView.ParameterType) parameter.type, value);
243
244                 EditorUtility.SetDirty(
this.m_Target);
245             }
246         }
247     }
248 }


base.OnInspectorGUI();

GUILayout.Label( "m_SynchronizeLayers " + serializedObject.FindProperty( "m_SynchronizeLayers" ).arraySize );

GUILayout.Label( "m_SynchronizeParameters " + serializedObject.FindProperty( "m_SynchronizeParameters" ).arraySize );




Trò chơi Tic-Tac-Toe, game đánh caro full source code 53.438 lượt xem

Gõ tìm kiếm nhanh...